package com.example.blogsystem.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 * Description: 密码工具类
 * User: DELL
 * Date: 2023-09-06
 * Time: 23:18
 */
public class PasswordUtils {

    /**
     * 加盐加密
     *
     * @param password
     * @return 盐值 + 分隔符('$') + 密码
     */
    public static String encrypt(String password) {
        // 1.生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2.将 盐值+密码 进行 md5 加密
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        // 3.返回 盐值 + 分隔符('$') + 密码
        return salt + "$" + finalPassword;
    }

    /**
     * 加盐验证密码是否正确
     *
     * @param password   待验证密码
     * @param dbPassword 数据库中的密码
     * @return
     */
    public static boolean decrypt(String password, String dbPassword) {
        if (!StringUtils.hasLength(password) || !StringUtils.hasLength(dbPassword)
                || dbPassword.length() != 65) {
            return false;
        }
        // 1.得到盐值 和 密码
        String[] passwordArray = dbPassword.split("\\$");
        if (passwordArray.length != 2) {
            return false;
        }
        String salt = passwordArray[0];
        String dbFinalPassword = passwordArray[1];
        // 2.对 待验证密码+盐值 进行 md5 加密
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        // 3.对比
        return finalPassword.equals(dbFinalPassword);
    }
}
